import { getToken, setToken, removeToken, setTimeStamp } from '@/utils/auth'
import { login, getUserInfo, getUserDetailById, logout } from '@/api/user'
import {resetRouter} from '@/router'
const state = {
  token: getToken(),   //设置token初始状态
  userInfo: {}
}
const mutations = {
  setToken(state, token) {
    state.token = token //将数据设置给vuex
    // 同步缓存
    setToken(token)
  },
  removeToken(state) {
    state.token = null //将vuex的数据置空
    removeToken()  //同步缓存
  },

  // 同步更新/设置用户信息   写的过程
  setUserInfo(state, userInfo) {
    state.userInfo = userInfo
  },
  // 删除过程
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
const actions = {
  async login(context, data) {
    // 调用api接口
    const result = await login(data)
    // // axios默认加了一层data
    // if(result.data.success) {
    // 如果为true 表示登录成功
    context.commit('setToken', result)

    // 写入事件戳
    setTimeStamp()
  },
  // }

  async getUserInfo(context) {
    // api/getUserInfo
    // 这里的result就是接口文档中data字段  包含：userID，mobile ....
    const result = await getUserInfo()

    // 获取用户详情
    const baseInfo = await getUserDetailById(result.userId)
    context.commit('setUserInfo', { ...result, ...baseInfo })
    return result //埋个伏笔 给后面使用
  },
  // 登出的action
  logout(context) {
    // 删除token
    context.commit('removeToken')
    // 删除用户信息
    context.commit('removeUserInfo')
    // 重置router对象的路由表，只支持静态路由
    resetRouter()
    // routes路由表，除了router对象中有以外，vuex也有存储
    // 需要重置vuex 的permission中的路由表
    // 跨模块提交mutations 需要在后面添加一个root:true
    context.commit('permission/setRoutes', [], { root: true })
  }
}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}